/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package es.us.mwm.managers;

import es.us.mwm.ejb.UserEJBLocal;
import es.us.mwm.entities.Users;
import es.us.mwm.managers.util.JsfUtil;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

/**
 * Clase para la gestion del login
 * Recoge y comprueba que los datos de acceso sean correctos, inicializa sesion y redirecciona
 * @author y0rg
 */
@ManagedBean(name = "login")
@RequestScoped
public class LoginManager implements Serializable {

    @EJB
    private UserEJBLocal userFacade;
    private Users user;
    private List<Users> userList;
    private FacesContext context;

    /**
     * Creates a new instance of LoginManagedBean
     */
    public LoginManager() {
        user = new Users();
        context = FacesContext.getCurrentInstance();
    }

    public void setUserList(List<Users> userList) {
        this.userList = userList;
    }

    public List<Users> getUserList() {
        return userFacade.getUsersFindAll();
    }

    public String login() {
        String s = userFacade.checkLogin(user.getUser(), user.getPassword());
        if (s.equals("ERROR")) {

            JsfUtil.addErrorMessage("Error en los datos de acceso");
            //context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Error", "Error en los datos."));
        } else {
            HttpSession session = (HttpSession) context.getExternalContext().getSession(true);
            session.setAttribute("user", user.getUser());
            session.setAttribute("admin", s);
            //TODO
            //Se puede mejorar, estoy consultando dos veces la base de datos.
            user = userFacade.getUser(user.getUser());
            user.setLastConnection(new Date());
            //user.setStatus("Connected");
            userFacade.mergeUsers(user);
        }
        return s;
    }

    /**
     * Metodo para salir de la aplicacion. Logout
     * @return LOGOUT para redireccionar al index
     */
    public String logout() {
        user = userFacade.getUser(user.getUser());
        user.setLastConnection(new Date());
        //user.setStatus("Active");
        userFacade.mergeUsers(user);

        context.getExternalContext().invalidateSession();
        return "LOGOUT";
    }

    /**
     * Metodo de acceso para el atributo
     * @param user usuario
     */
    public void setUser(Users user) {
        this.user = user;
    }

    /**
     * Metodo de acceso para el atributo
     * @return usuario
     */
    public Users getUser() {
        return user;
    }

}
